/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package StoreServerSide;

import Message.*;
import Message.Message.*;
import Message.MessageException;

/**
 *
 * @author PedroEee
 */
public class StoreMonitorInterface {

    /**
     *  Barbearia (representa o serviço a ser prestado)
     *
     *    @serialField bShop
     */
    private StoreMonitor store;

    /**
     *  Instanciação do interface à barbearia.
     *
     *    @param bShop barbearia
     */
    public StoreMonitorInterface(StoreMonitor store) {
        this.store = store;
    }

    /**
     *  Processamento das mensagens através da execução da tarefa correspondente.
     *  Geração de uma mensagem de resposta.
     *
     *    @param inMessage mensagem com o pedido
     *
     *    @return mensagem de resposta
     *
     *    @throws MessageException se a mensagem com o pedido for considerada inválida
     */
    public Message processAndReply(Message inMessage) throws MessageException {
        Message outMessage = null;                           // mensagem de resposta

        /* validação da mensagem recebida */

        switch (inMessage.getTypeS()) {
            case goShopping:
                if (inMessage.getCustId() < 0) {
                    throw new MessageException("Id do cliente inválido", inMessage);
                }
                break;
            case isDoorOpen:
            case enterShop:
                if (inMessage.getCustId() < 0) {
                    throw new MessageException("Id do cliente inválido", inMessage);
                }
                break;
            case isDonaIsDead:
            case perusingAround:
                if (inMessage.getCustId() < 0) {
                    throw new MessageException("Id do cliente inválido", inMessage);
                }
                break;
            case iWantThis:
                if (inMessage.getCustId() < 0) {
                    throw new MessageException("Id do cliente inválido", inMessage);
                }
                if (inMessage.getnProducts() < 0) {
                    throw new MessageException("Numero de Produtos inválido", inMessage);
                }
                break;
            case exitShop:
                if (inMessage.getCustId() < 0) {
                    throw new MessageException("Id do cliente inválido", inMessage);
                }
                break;
            default:
                throw new MessageException("Tipo inválido!", inMessage);
        }

        /* Seu processamento */

        switch (inMessage.getTypeS()) {
            case goShopping:
                store.goShopping(inMessage.getCustId());
                outMessage = new Message (invokesStore.inShoping);
                break;
            case isDoorOpen:
                store.isDoorOpen();
                outMessage = new Message (invokesStore.ACK);
                break;
            case enterShop:
                store.enterShop(inMessage.getCustId());
                outMessage = new Message (invokesStore.ACK);
            case perusingAround:
                int ng = store.perusingAround(inMessage.getCustId());
                outMessage = new Message(invokesStore.ACK, inMessage.getCustId(), ng);
            case iWantThis:
                store.iWantThis(inMessage.getCustId(), inMessage.getnProducts());
                outMessage = new Message(invokesStore.ACK);
            case exitShop:
                store.exitShop(inMessage.getCustId());
                outMessage = new Message(invokesStore.ACK);
        }

        return (outMessage);
    }
}

